﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//模拟实现strcmp
//int My_strcmp(const char* str1, const char* str2)
//{
//	while (*str1 == *str2)
//	{
//		str1++;
//		str2++;
//		if ( *str1 == '\0')
//			return 0;
//	}
//	return *str1 - *str2;
//}
//int main()
//{
//	char ch1[] = "ABDD";
//	char ch2[] = "ABDE";
//	int n = My_strcmp(ch1, ch2);
//	if (n == 0)
//	{
//		printf("");
//	}
//	else if (n > 0)
//	{
//		printf(">");
//	}
//	else
//	{
//		printf("<");
//	}
//	return 0;
//}

//模拟实现strstr
//const char* My_strstr(const char* str1, const char* str2)
//{
//	const char* s1 = str1;
//	const char* s2 = str2;
//	const char* cur= str1;
//
//	while (*cur)
//	{
//		s1 = cur;
//		s2 = str2;
//		while (*s1 && *s2 && (*s1 == *s2))
//		{
//			s1++;
//			s2++;
//		}
//		if (*s2 == '\0')
//		{
//			return cur;
//		}
//		cur++;
//	}
//	return NULL;
//}
//
//
//int main()
//{
//	char ch1[] = "wai c/cpp";
//	char ch2[] = "cppw";
//	const char* p = My_strstr(ch1,ch2);
//	if (p == NULL)
//	{
//		printf("没找到");
//
//	}
//	else
//	{
//		printf("%s", p);
//
//	}
//	return 0;
//}

//模拟实现strncpy
//char* My_strncpy(char* destination, const char* source, size_t num) 
//{
//	char* p = destination;
//	while (num--)
//	{
//		if (*source != '\0')
//		{
//			*destination++ = *source++;
//		}
//		else
//		{
//			*destination++ = '\0';
//		}
//	}
//	return p;
//}
//
//int main()
//{
//	char ch1[] = "xxxxxxyx";
//	char ch2[] = "abcd";
//	char* p = My_strncpy(ch1, ch2, 4);
//	printf("%s", p);
//	return 0;
//}

//模拟实现strncat
//char* My_strncat(char* destination, const char* source, size_t num)
//{
//	char* p = destination;
//	while (*destination)
//	{
//		destination++;
//	}
//	while ((num--) && (*destination++ = *source++))
//	{
//		
//	}
//	if (*--destination != '\0')
//		*++destination = '\0'; 
//	return p;
//}
//
//int main()
//{
//	char ch1[40] = "xxxxxy";
//	char ch2[] = "abcd";
//	char* p = My_strncat(ch1, ch2,4);
//	printf("%s", p);
//	return 0;
//}

//模拟实现memcpy
//void* My_memcpy(void* destination, const void* source, size_t num)
//{
//	void* p = destination;
//	while (num--)
//	{
//		*(char*)destination = *(char*)source;
//		destination = ((char*)destination)+1;
//		source = ((char*)source)+1;
//	}
//	return p;
//}
//#include <string.h>
//int main()
//{
//	char ch1[40] = { 0 };
//	char ch2[] = "abdfeasa";
//	size_t num = strlen(ch2);
//	void* p = My_memcpy(ch1, ch2,num*sizeof(char));
//	printf("%s", (char*)p);
//	return 0;
//}

//模拟实现memmove

void* My_memmove(void* destination, const void* source, size_t num)
{
	void* p = destination;

	if (destination < source) 
	{
		while (num--)
		{
			*(char*)destination = *(char*)source;
			destination = (char*)destination + 1;
			source = (char*)source + 1;
		}
	}
	else
	{
		while (num--)
		{
			*((char*)destination + num) = *((char*)source + num);
		}
	}
	return p;
}

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	void* ret = My_memmove(arr+2, arr, 6*sizeof(int));
	return 0;
}
